<?php

// 应用公共文件
if (!function_exists('build_select')) {
    /**
     * 生成下拉列表
     *
     * @param string $name
     * @param mixed $options
     * @param mixed $selected
     * @param mixed $attr
     *
     * @return string
     */
    function build_select(string $name, $options, $selected = [], $attr = [])
    {
        $options = is_array($options) ? $options : explode(',', $options);
        $selected = is_array($selected) ? $selected : explode(',', $selected);
        return \Form::select($name, $options, $selected, $attr);
    }
}

if (!function_exists('build_checkbox')) {
    /**
     * 生成多选按钮组
     *
     * @param string $name
     * @param mixed $value
     * @param mixed $checked
     * @param mixed $options
     *
     * @return string
     */
    function build_checkbox(string $name, $value = 1, $checked = null, array $options = [])
    {
        return \Form::checkbox($name, $value, $checked, $options);
    }
}

if (!function_exists('build_radios')) {
    /**
     * 生成单选按钮组
     *
     * @param string $name
     * @param array $list
     * @param mixed $selected
     *
     * @return string
     */
    function build_radios(string $name, array $list = [], $selected = null): string
    {
        $html = [];
        $selected = is_null($selected) ? key($list) : $selected;
        $selected = is_array($selected) ? $selected : explode(',', $selected);
        foreach ($list as $k => $v) {
            $html[] = \Form::radio($name, $k, in_array($k, $selected), ['title' => $v]);
        }
        return implode(' ', $html);
    }
}

if (!function_exists('result')) {
    /**
     * @return Result
     */
    function result()
    {
        return app('result');
    }
}

if (!function_exists('auth')) {
    /**
     * @return Auth
     */
    function auth()
    {
        return app('auth');
    }
}

if (!function_exists('tree')) {
    /**
     * @return Tree
     */
    function tree()
    {
        return app('tree');
    }
}

if (!function_exists('getBuildParams')) {
    /**
     * 生成查询所需要的条件,排序方式
     *
     * @param string $searchField 快速查询的字段
     *
     * @return array
     */
    function getBuildParams(string $searchField = 'id'): array
    {
        // 查找
        $search = request()->get('search', '');
        // 根据字段排序
        $sort = request()->get('sort', 'id');
        $order = request()->get("order", "DESC");
        // 分页和获取数据数量
        $offset = request()->get("page", 0);
        $limit = request()->get("limit", 0);
        // 查找条件
        $where = [];
        $tableName = '';
        // 获取管理员ID
        $adminIds = getDataLimitAdminIds();
        if (is_array($adminIds)) {
            $where[] = [$tableName . 'admin_id', 'in', $adminIds];
        }
        if ($search) {
            $searChar = is_array($searchField) ? $searchField : explode(',', $searchField);
            foreach ($searChar as $k => &$v) {
                $v = stripos($v, ".") === false ? $tableName . $v : $v;
            }
            unset($v);
            $where[] = [implode("|", $searChar), "LIKE", "%{$search}%"];
        }
        // 数据打包发送
        $order = ['sort' => $sort, 'order' => $order];
        $offset = ['offset' => (int)$offset, 'limit' => (int)$limit];
        return [$where, $order, $offset];
    }

    /**
     * 获取数据限制的管理员ID
     * 禁用数据限制时返回的是null
     * @return mixed
     */
    function getDataLimitAdminIds()
    {
        // 表示按权限判断/仅限个人
        // 默认为禁用,若启用请务必保证表中存在admin_id字段
        $dataLimit = true;

        // 是否开启数据限制
        if (!$dataLimit) {
            return null;
        }

        // 判断是否是超级管理员，如果是超级管理员那么全部显示
        if (auth()->isSuperAdmin()) {
            return null;
        }

        // 管理员ID
        $adminIds = [];
        if (in_array($dataLimit, ['auth', 'personal'])) {
            $adminIds = $dataLimit == 'auth' ? auth()->getChildrenAdminIds(true) : [auth()->info('id')];
        }
        return $adminIds;
    }
}